using System.Data.Entity.ModelConfiguration;
using CodeSaude.Domain.Entities;

namespace CodeSaude.Infrastructure.Data.EntityConfig
{
    public class UsuarioMap : EntityTypeConfiguration<Usuario>
    {
        public UsuarioMap()
        {
            // Primary Key
            HasKey(t => t.UsuarioId);

            // Properties
            Property(t => t.Nome)
                .HasMaxLength(90);

            Property(t => t.Email)
                .HasMaxLength(40);

            Property(t => t.Senha)
                .HasMaxLength(255);

            Property(t => t.Cpf)
                .HasMaxLength(20);

            Property(t => t.Login)
                .HasMaxLength(20);

            // Table & Column Mappings
            ToTable("Usuario");
            Property(t => t.UsuarioId).HasColumnName("id_Usuario");
            Property(t => t.GrupoUsuarioId).HasColumnName("id_GrupoUsuario");
            Property(t => t.Nome).HasColumnName("nome");
            Property(t => t.Email).HasColumnName("email");
            Property(t => t.Senha).HasColumnName("senha");
            Property(t => t.Cpf).HasColumnName("cpf");
            Property(t => t.Login).HasColumnName("login");
            Property(t => t.IdSituacao).HasColumnName("id_situacao");
            Property(t => t.DataCriacao).HasColumnName("data_criacao");
            Property(t => t.UsuarioCriacao).HasColumnName("Usuario_criacao");
            Property(t => t.DataAlteracao).HasColumnName("data_alteracao");
            Property(t => t.UsuarioAlteracao).HasColumnName("Usuario_alteracao");
            Property(t => t.FlagSenhaPadrao).HasColumnName("flag_senha_padrao");
            Property(t => t.FlagAtualizado).HasColumnName("flag_atualizado");

            //Relationships
            HasRequired(t => t.GrupoUsuario)
                .WithMany(t => t.ListaUsuarios)
                .HasForeignKey(d => d.GrupoUsuarioId);
        }
    }
}
